// 贪心的思维无法正确求解这道题
// 这是由于其具有后效性，第一次的路径会影响第二次的路径选择
// 所以利用要同时走两次才能找到最优解
// f[i1,j1,i2,j2]表示分别走到[i1, j1] [i2,j2]时的路径和
// 并且要注意当两条路径经过同一个点时，只能加一次
// 发现两条路径同时经过一点时i1 + j1 = i2 + j2
// 所以可以将四维dp优化成三维，用k来存储两下标的和，当k相同时，才需要进行下一步判断
#include <iostream>
#include <algorithm>
using namespace std;

const int N = 15, M = 2 * N;
int w[N][N];
int f[M][N][N];
int n, a, b, c;
int main()
{
    cin >> n;
    while (cin >> a >> b >> c, a && b && c)
        w[a][b] = c;
    for (int k = 2; k <= n + n; ++k)
        for (int i1 = 1; i1 < k; ++i1)
            for (int i2 = 1; i2 < k; ++i2)
            {
                int j1 = k - i1, j2 = k - i2;
                int t = w[i1][j1];
                if (i1 != i2)
                    t += w[i2][j2]; // 如果i1不等于i2，说明当前两个点不是同一个点，需要加两次
                int &x = f[k][i1][i2];
                // 通过集合划分的方式找到每个方式中的最大值
                x = max(x, f[k - 1][i1 - 1][i2 - 1] + t);
                x = max(x, f[k - 1][i1 - 1][i2] + t);
                x = max(x, f[k - 1][i1][i2 - 1] + t);
                x = max(x, f[k - 1][i1][i2] + t);
            }
    cout << f[n + n][n][n] << endl;
    return 0;
}